import { initDataFiles, initDefaultCategories, readUsers, writeUsers } from './data';
import { registerUser } from './auth';
import bcrypt from 'bcryptjs';
import fs from 'fs';
import path from 'path';

// 初始化应用数据
export async function initApp() {
  initDataFiles();
  initDefaultCategories();
  await initAdminUser();
}

// 从环境变量创建管理员账户
export async function initAdminUser() {
  const adminUsername = process.env.ADMIN_USERNAME?.trim();
  const adminPassword = process.env.ADMIN_PASSWORD?.trim();

  // 如果环境变量未设置，跳过管理员初始化
  if (!adminUsername || !adminPassword) {
    console.warn('警告: ADMIN_USERNAME 或 ADMIN_PASSWORD 未设置，跳过管理员账户初始化');
    console.warn(`调试信息: ADMIN_USERNAME=${adminUsername ? '已设置' : '未设置'}, ADMIN_PASSWORD=${adminPassword ? '已设置' : '未设置'}`);
    return;
  }

  console.log(`[initAdminUser] 开始初始化管理员账户: ${adminUsername}`);

  const users = readUsers();
  
  // 检查管理员账户是否已存在
  const existingAdmin = users.find(u => u.username === adminUsername);
  
  if (existingAdmin) {
    let needsUpdate = false;
    
    // 如果管理员已存在，检查是否需要更新密码
    const passwordMatches = await bcrypt.compare(adminPassword, existingAdmin.password);
    
    if (!passwordMatches) {
      // 如果密码不匹配，更新密码
      const hashedPassword = await bcrypt.hash(adminPassword, 10);
      existingAdmin.password = hashedPassword;
      needsUpdate = true;
      console.log(`管理员账户 ${adminUsername} 的密码已更新`);
    }
    
    if (!existingAdmin.isAdmin) {
      // 如果用户存在但不是管理员，提升为管理员
      existingAdmin.isAdmin = true;
      needsUpdate = true;
      console.log(`用户 ${adminUsername} 已被设置为管理员`);
    }
    
    // 只有在需要更新时才保存
    if (needsUpdate) {
      writeUsers(users);
    }
    return;
  }

  // 创建新管理员账户
  try {
    const result = await registerUser(adminUsername, adminPassword);
    if (result.success && result.user) {
      // 将新用户设置为管理员
      const usersFile = path.join(process.cwd(), 'data', 'users.json');
      const updatedUsers = JSON.parse(fs.readFileSync(usersFile, 'utf-8'));
      const adminUser = updatedUsers.find((u: any) => u.username === adminUsername);
      if (adminUser) {
        adminUser.isAdmin = true;
        fs.writeFileSync(usersFile, JSON.stringify(updatedUsers, null, 2), 'utf-8');
        console.log(`管理员账户创建成功: ${adminUsername}`);
      }
    } else {
      console.error('创建管理员账户失败:', result.message);
    }
  } catch (error) {
    console.error('创建管理员账户失败:', error);
  }
}

